import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { TimerService } from './timer.service';
import { CreateTimerDto } from './dto/create-timer.dto';
import { Auth } from 'src/core/auth/decorator/auth.decorator';

@ApiTags('定时器')
@Controller('timer')
export class TimerController {
  constructor(private readonly timerService: TimerService) {}

  /**
   * 尝试定时任务
   * @param post
   */
  @Auth({
    required: false,
  })
  @ApiOperation({ summary: '开启定时任务' })
  @Post('/start-timer')

  //与标准 cron 表达式的区别
  //- 标准 cron 表达式有5个字段（分、时、日、月、周），最小精度为分钟
  //- 扩展版 cron 表达式有6个字段（秒、分、时、日、月、周），可以实现秒级精度
  //- */5 中的 \/ 是步长操作符，表示「每隔指定时间」
  // 所以 */5 在秒字段中表示「从第0秒开始，每隔5秒执行一次」
  // 组合起来，整个表达式 */5 * * * * * 就是「每5秒执行一次」
  async create(@Body() post: CreateTimerDto) {
    return this.timerService.addCronJob(post.name, '*/5 * * * * *', () => {
      console.log('定时任务已启动，每五秒执行一次');
    });
  }

  /**
   * 手动停止 Cron 定时任务
   * @param post
   */
  @Auth({
    required: false,
  })
  @ApiOperation({ summary: '手动停止 Cron 定时任务' })
  @Get('/stop-timer/:name')
  async stopTimer(@Param('name') name: string) {
    return this.timerService.stopCronJob(name);
  }
}
